home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / dtype / fontdt1.0.lha / Src / prefs.c < prev   
C/C++ Source or Header  |  1995-04-22  |  2KB  |  82 lines

  1. /*
  2. **    prefs.c - prefrences handling for Font DataType class
  3. **    Copyright © 1995 Michael Letowski
  4. */
  5.  
  6. #include <exec/types.h>
  7. #include <exec/memory.h>
  8. #include <dos/dos.h>
  9. #include <dos/rdargs.h>
  10. #include <support/types.h>
  11.  
  12. #include "classbase.h"
  13. #include "prefs.h"
  14.  
  15. #include <proto/exec.h>
  16. #include <proto/dos.h>
  17.  
  18. #define BUF_LEN            256
  19.  
  20. #define PREFS_PATH1    "PROGDIR:Prefs/DataTypes/font.prefs"
  21. #define PREFS_PATH2    "ENV:DataTypes/font.prefs"
  22.  
  23. STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
  24.                                                 struct Opts *opts, STRPTR name);
  25.  
  26. struct PrefsHandle *GetFontPrefs(struct ClassBase *cb, struct Opts *opts)
  27. {
  28.     struct PrefsHandle *PH;
  29.  
  30.     try(newv(PH,MEMF_CLEAR),                                                NO_PREFS);
  31.     try(PH->ph_RDA=AllocDosObject(DOS_RDARGS,NULL),    NO_RDA);
  32.     fset(PH->ph_RDA->RDA_Flags,RDAF_NOPROMPT);        /* Disable prompts */
  33.     clear(opts);                                                                    /* Set defaults */
  34.     unless(ReadPrefs(cb,PH,opts,PREFS_PATH1))
  35.         ReadPrefs(cb,PH,opts,PREFS_PATH2);
  36.     return(PH);
  37.  
  38.     except(NO_RDA,        FreeDosObject(DOS_RDARGS,PH->ph_RDA));
  39.     except(NO_PREFS,    deletev(PH));
  40.     return(NULL);
  41. }    /* GetFontPrefs */
  42.  
  43. VOID FreeFontPrefs(struct ClassBase *cb, struct PrefsHandle *ph)
  44. {
  45.     ph->ph_RDA->RDA_Buffer=NULL;                                    /* Don't free buffer */
  46.     FreeArgs(ph->ph_Args);
  47.     FreeDosObject(DOS_RDARGS,ph->ph_RDA);
  48.     deletev(ph);
  49. }    /* FreeFontPrefs */
  50.  
  51. STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
  52.                                                 struct Opts *opts, STRPTR name)
  53. {
  54.     struct RDArgs *RDA=ph->ph_RDA;
  55.     CHAR Buffer[BUF_LEN];
  56.     ULONG Len;
  57.     BPTR FH;
  58.     LBOOL Result=FALSE;
  59.  
  60.     try(FH=Open(name,MODE_OLDFILE),    NO_FILE);
  61.     RDA->RDA_Source.CS_Buffer=Buffer;                            /* Set up buffer to read from */
  62.  
  63.     /* Read args */
  64.     while(FGets(FH,Buffer,BUF_LEN-1))                            /* Last byte spare */
  65.     {
  66.         if(ph->ph_Args)
  67.             FreeArgs(ph->ph_Args);                                        /* Free previous line args */
  68.         clear(opts);                                                                /* Clear args */
  69.         Len=strlen(Buffer);                                                    /* Calculate length */
  70.         Buffer[Len]='\n';                                                        /* New line char */
  71.         Buffer[Len+1]='\0';                                                    /* String terminator */
  72.         RDA->RDA_Source.CS_Length=Len+1;                        /* Set up string len */
  73.         RDA->RDA_Source.CS_CurChr=0;                                /* Set up current char */
  74.         RDA->RDA_Buffer=NULL;                                                /* As documented in AutoDocs */
  75.         ph->ph_Args=ReadArgs(TEMPLATE,(LONG *)opts,RDA);    /* Read from file */
  76.     }
  77.     Result=(ph->ph_Args) ? TRUE : FALSE;
  78.  
  79.     except(NO_FILE,    Close(FH));
  80.     return(Result);
  81. }    /* ReadPrefs */
  82.